//+------------------------------------------------------------------+ //| Gann high-low activator | //| | //+------------------------------------------------------------------+ #property copyright "www.forex-tsd.com" #property link "www.forex-tsd.com" #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 DeepSkyBlue #property indicator_color2 OrangeRed #property indicator_minimum 0 #property indicator_maximum 1 #property indicator_width1 2 #property indicator_width2 2 // // // // // extern string TimeFrame = "Current time frame"; extern int Lb = 3; extern bool alertsOn = false; extern bool alertsOnCurrent = true; extern bool alertsMessage = true; extern bool alertsSound = false; extern bool alertsEmail = false; // // // // // double gup[]; double gdn[]; double trend[]; // // // // // int timeFrame; string indicatorFileName; bool returnBars; bool calculateValue; //+------------------------------------------------------------------ //| //+------------------------------------------------------------------ // // // // // int init() { IndicatorBuffers(3); //SetIndexBuffer(0,gup); SetIndexDrawBegin(0,Lb+1); SetIndexStyle(0,DRAW_HISTOGRAM); //SetIndexBuffer(1,gdn); SetIndexDrawBegin(1,Lb+1); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexBuffer(0,gup); SetIndexDrawBegin(0,Lb+1); SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,110);// SetIndexLabel(0,"SSLup "+Lb+" ["+TimeFrame+"]"); SetIndexBuffer(1,gdn); SetIndexDrawBegin(1,Lb+1); SetIndexStyle(1,DRAW_ARROW); SetIndexArrow(1,110);// SetIndexLabel(1,"SSLdn "+Lb+" ["+TimeFrame+"]"); SetIndexBuffer(2,trend); // // // // // indicatorFileName = WindowExpertName(); calculateValue = (TimeFrame=="calculateValue"); if (calculateValue) return(0); returnBars = (TimeFrame=="returnBars"); if (returnBars) return(0); timeFrame = stringToTimeFrame(TimeFrame); // // // // // IndicatorShortName(timeFrameToString(timeFrame)+" Gann high/low activator ("+Lb+")"); return(0); } //+------------------------------------------------------------------ //| //+------------------------------------------------------------------ // // // // // int start() { int counted_bars=IndicatorCounted(); int i,limit; if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; limit=MathMin(Bars-counted_bars,Bars-1); if (returnBars) { gup[0] = limit+1; return(0); } // // // // // if (calculateValue || timeFrame == Period()) { for(i=limit;i>=0;i--) { gup[i] = EMPTY_VALUE; gdn[i] = EMPTY_VALUE; trend[i] = trend[i+1]; if(Close[i]>iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_HIGH,i+1)) trend[i] = 1; if(Close[i]=0; i--) { int y = iBarShift(NULL,timeFrame,Time[i]); gup[i] = EMPTY_VALUE; gdn[i] = EMPTY_VALUE; trend[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Lb,2,y); if(trend[i] == -1) gdn[i] = 1; else gup[i] = 1; } // // // // // manageAlerts(); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // void manageAlerts() { if (!calculateValue && alertsOn) { if (alertsOnCurrent) int whichBar = 0; else whichBar = 1; whichBar = iBarShift(NULL,0,iTime(NULL,timeFrame,whichBar)); if (trend[whichBar] != trend[whichBar+1]) { if (trend[whichBar] == 1) doAlert(whichBar,"up"); if (trend[whichBar] ==-1) doAlert(whichBar,"down"); } } } // // // // // void doAlert(int forBar, string doWhat) { static string previousAlert="nothing"; static datetime previousTime; string message; if (previousAlert != doWhat || previousTime != Time[forBar]) { previousAlert = doWhat; previousTime = Time[forBar]; // // // // // message = StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," Gann HL activator trend changed to ",doWhat); if (alertsMessage) Alert(message); if (alertsEmail) SendMail(StringConcatenate(Symbol(),"Gann HL "),message); if (alertsSound) PlaySound("alert2.wav"); } } //+------------------------------------------------------------------- //| //+------------------------------------------------------------------- // // // // // string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"}; int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200}; // // // // // int stringToTimeFrame(string tfs) { tfs = stringUpperCase(tfs); for (int i=ArraySize(iTfTable)-1; i>=0; i--) if (tfs==sTfTable[i] || tfs==""+iTfTable[i]) return(MathMax(iTfTable[i],Period())); return(Period()); } string timeFrameToString(int tf) { for (int i=ArraySize(iTfTable)-1; i>=0; i--) if (tf==iTfTable[i]) return(sTfTable[i]); return(""); } // // // // // string stringUpperCase(string str) { string s = str; for (int length=StringLen(str)-1; length>=0; length--) { int char = StringGetChar(s, length); if((char > 96 && char < 123) || (char > 223 && char < 256)) s = StringSetChar(s, length, char - 32); else if(char > -33 && char < 0) s = StringSetChar(s, length, char + 224); } return(s); }